home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / -WHDLoad- / WHDLoad_dev / Patcher1.04 / Patcher15.ASM < prev    next >
Assembly Source File  |  2000-05-08  |  59KB  |  3,281 lines

  1. ;V1.04    ERRORMESSAGE IF PATCH WAS CLICKED WITH NO PARAMETER SELECTED
  2. ;V1.03    VERSIONSTRING ADDED, CRC16-EVALROUTINE ADDED
  3. ;V1.02    FSSM-DEVICEPOINTER STORED, ADDED DRIVEINHIBIT-OPTION
  4. ;V1.01    COMMANDLINEPARAMETER ADDED
  5. ;V1.00    INITIAL REVISION
  6.  
  7.     INCDIR    ASM-ONE:INCLUDE2.0/
  8.  
  9.     INCLUDE LIBRARIES/DOS_LIB.I
  10.     INCLUDE    LIBRARIES/FILEHANDLER.I
  11.     INCLUDE    LIBRARIES/DOSEXTENS.I
  12.     INCLUDE    LIBRARIES/DISKFONT_LIB.I
  13.     INCLUDE EXEC/EXEC_LIB.I
  14.     INCLUDE    EXEC/MEMORY.I
  15.     INCLUDE    GRAPHICS/GRAPHICS_LIB.I
  16.     INCLUDE INTUITION/INTUITION_LIB.I
  17.     INCLUDE INTUITION/INTUITION.I
  18.     INCLUDE    DEVICES/TRACKDISK.I
  19.     INCLUDE    EXEC/IO.I
  20. ;_SYSBASE    EQU    4
  21.  
  22.     INCDIR    ASM-ONE:OWN/Patcher/
  23. ;VERSION=1
  24. ;SUBVERSION=4
  25.  
  26. debug=0
  27.  
  28. FlaggenTEMP    =    activate!WINDOWDRAG!WINDOWCLOSE    ;!REPORTMOUSE
  29. FLAGGEN    =    FLAGGENTEMP!WBENCHWINDOW!WINDOWDEPTH!GIMMEZEROZERO
  30. ICDMPFLTEMP    =    GADGETUP!ACTIVEWINDOW    ;!MOUSEBUTTONS
  31. ICDMPFL    =    ICDMPFLTEMP!INACTIVEWINDOW!CLOSEWINDOW
  32.  
  33. JAM2    = 1
  34. ;MODE_READWRITE = $3ED
  35.  
  36.  
  37. ;patcher-includefile for V1.03
  38.  
  39. PCH_FILECOUNT        = $80004450
  40. PCH_ADAPTOR        = $80004451
  41. PCH_DISKNAME        = $80004452
  42. PCH_CHECKDISK        = $80004453
  43. PCH_FILENAME        = $80004454
  44. PCH_SPECIAL        = $80004455
  45. PCH_CHANGES        = $80004456
  46. PCH_PROCESSING        = $80004457
  47. PCH_NAME        = $80004458
  48. PCH_MINVERSION        = $80004459
  49. PCH_LOADOFFSET        = $8000445A
  50. PCH_INIT        = $8000445B
  51. PCH_STATE        = $8000445C
  52. PCH_STATE2        = $8000445D
  53. PCH_APPENDSPACE        = $8000445E
  54. PCH_SAVEDATA        = $8000445F
  55. PCH_DATALENGTH        = $80004460
  56. PCH_BOOTBLOCK        = $80004461
  57. PCH_FINISH        = $80004462
  58. PCH_ERRORINPARAMETER    = $80004463
  59. PCH_SAVEPGM        = $80004464
  60.  
  61. PTB_DOSBASE        = $0
  62. PTB_ADDRESSOFFILE    = $4
  63. PTB_INTUITIONBASE    = $8
  64. PTB_GFXBASE        = $C
  65. PTB_WINDOW        = $10
  66. PTB_FILENAME        = $14
  67. PTB_FULLNAME        = $18
  68. PTB_FILESIZE        = $1C
  69. PTB_DISKNAME        = $20
  70. PTB_OPENDEVICE        = $24
  71. PTB_DEVICESOURCEPTR    = $28
  72. PTB_DEVICEDESTPTR    = $2C
  73. PTB_SPACE        = $30
  74. PTB_FORMATDEST        = $34
  75. PTB_REQUEST        = $38
  76. ;--- new since version 1.02 ---
  77. PTB_FSSMSOURCEPTR    = $3C
  78. PTB_FSSMDESTPTR        = $40
  79. PTB_INHIBITDRIVE    = $44
  80. PTB_ENABLEDRIVE        = $48
  81. ;--- new since version 1.03 ---
  82. PTB_CRC16        = $4C
  83.  
  84.     SECTION    Editor,CODE
  85.  
  86.     BRA.S    HP
  87.     DC.B    0,'$VER: Patcher 1.04 (17-jun-97 2:00:00)',0
  88.     EVEN
  89.  
  90. HP
  91.     BASEREG    DOSBAS,A5
  92.     LEA.L    DOSBAS(PC),A5
  93.     MOVE.L    A7,OSSTACK(A5)
  94.  
  95.     ifne    debug
  96.     lea    .line(PC),a0
  97.     bra.s    .contdb
  98. .line    dc.b    '-sdf2: -pasm-one:own/patcher/parameter/imagerrocknroll',0
  99.     EVEN
  100. .contdb
  101.     endc
  102.  
  103.  
  104.     BSR.W    EXAMCL
  105.     MOVE.L    (_SYSBASE).W,A6
  106.     LEA.L    INTUINAME(PC),A1
  107.     MOVE.L    #0,D0
  108.     JSR    _LVOOpenLibrary(A6)    ;Intuition öffnen
  109.     TST.L    D0
  110.     BEQ.W    ERR
  111.     MOVE.L    D0,INTUIBASE(A5)    ;Zeiger sichern
  112.     MOVE.L    (_SYSBASE).W,A6
  113.     LEA.L    DOSNAM(PC),A1
  114.     MOVEQ.L    #0,D0
  115.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  116.     TST.L    D0
  117.     BEQ.W    ERR
  118.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  119.     MOVE.L    (_SYSBASE).W,A6
  120.     LEA.L    GRANAME(PC),A1
  121.     MOVEQ.L    #0,D0
  122.     JSR    _LVOOpenLibrary(A6)    ;Graphic-Lib öffnen
  123.     TST.L    D0
  124.     BEQ.W    ERR
  125.     MOVE.L    D0,GRABASE(A5)        ;Zeiger sichern
  126.     MOVE.L    (_SYSBASE).W,A6
  127.     LEA.L    DISKFNTNAME(PC),A1
  128.     MOVEQ.L    #0,D0
  129.     JSR    _LVOOPENLIBRARY(A6)    ;Diskfont-Lib öffnen
  130.     TST.L    D0
  131.     BEQ.W    ERR
  132.     MOVE.L    D0,DISKFNTBASE(A5)    ;Zeiger sichern
  133.  
  134.     MOVE.L    DISKFNTBASE(PC),A6
  135.     LEA.L    RUBY_FNT(PC),A0
  136.     JSR    _LVOOPENDISKFONT(A6)
  137.     TST.L    D0
  138.     BEQ.W    ERR
  139.  
  140.     MOVE.L    #$28,D0
  141.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  142.     MOVE.L    (_SYSBASE).W,A6
  143.     JSR    _LVOALLOCMEM(A6)
  144.     TST.L    D0
  145.     BEQ.W    ERR
  146.     MOVE.L    D0,MYPORT(A5)
  147.  
  148.     MOVE.L    #$38,D0
  149.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  150.     MOVE.L    (_SYSBASE).W,A6
  151.     JSR    _LVOALLOCMEM(A6)
  152.     TST.L    D0
  153.     BEQ.W    ERR
  154.     MOVE.L    D0,BOOTIORQ(A5)
  155.  
  156.     MOVE.L    #$38,D0
  157.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  158.     MOVE.L    (_SYSBASE).W,A6
  159.     JSR    _LVOALLOCMEM(A6)
  160.     TST.L    D0
  161.     BEQ.W    ERR
  162.     MOVE.L    D0,DESTIORQ(A5)
  163.  
  164.     MOVE.L    #$38,D0
  165.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  166.     MOVE.L    (_SYSBASE).W,A6
  167.     JSR    _LVOALLOCMEM(A6)
  168.     TST.L    D0
  169.     BEQ.W    ERR
  170.     MOVE.L    D0,SOURCEIORQ(A5)
  171.  
  172.     MOVE.L    #$48,D0
  173.     MOVE.L    #MEMF_PUBLIC!MEMF_CLEAR,D1
  174.     MOVE.L    (_SYSBASE).W,A6
  175.     JSR    _LVOALLOCMEM(A6)
  176.     TST.L    D0
  177.     BEQ.W    ERR
  178.     MOVE.L    D0,DOSPACKETS(A5)
  179.  
  180.     MOVEQ.L    #-1,D0
  181.     MOVE.L    (_SYSBASE).W,A6
  182.     JSR    _LVOALLOCSIGNAL(A6)
  183.     CMP.L    #-1,D0
  184.     BEQ.W    ERR
  185.     MOVE.L    D0,SIGNALSTORE
  186.     
  187.     MOVE.L    MYPORT(PC),A4
  188.     MOVE.B    D0,MP_SIGBIT(A4)    
  189.     SUB.L    A1,A1
  190.     MOVE.L    (_SYSBASE).W,A6
  191.     JSR    _LVOFINDTASK(A6)
  192.     MOVE.L    D0,MP_SIGTASK(A4)
  193.     MOVE.B    #PA_SIGNAL,MP_FLAGS(A4)
  194.     CLR.B    LN_PRI(A4)
  195.     CLR.L    LN_NAME(A4)
  196.     MOVE.B    #NT_MSGPORT,LN_TYPE(A4)
  197.     MOVE.L    A4,A1
  198.     JSR    _LVOADDPORT(A6)
  199.     ST.B    PORTOK(A5)
  200.  
  201.     MOVE.L    MYPORT(PC),A0
  202.     MOVE.L    BOOTIORQ(PC),A1
  203.     MOVE.L    A0,MN_REPLYPORT(A1)
  204.     MOVE.W    #$20,MN_LENGTH(A1)
  205.     MOVE.B    #NT_MESSAGE,LN_TYPE(A1)
  206.     MOVE.L    DESTIORQ(PC),A1
  207.     MOVE.L    A0,MN_REPLYPORT(A1)
  208.     MOVE.W    #$20,MN_LENGTH(A1)
  209.     MOVE.B    #NT_MESSAGE,LN_TYPE(A1)
  210.     MOVE.L    SOURCEIORQ(PC),A1
  211.     MOVE.L    A0,MN_REPLYPORT(A1)
  212.     MOVE.W    #$20,MN_LENGTH(A1)
  213.     MOVE.B    #NT_MESSAGE,LN_TYPE(A1)
  214.     MOVE.L    DOSPACKETS(PC),A1
  215.     MOVE.L    A0,MN_REPLYPORT(A1)
  216.     MOVE.W    #$30,MN_LENGTH(A1)
  217.     MOVE.B    #NT_MESSAGE,LN_TYPE(A1)
  218.  
  219.     TST.B    EXEC1PARAM
  220.     BEQ.W    .ALLP
  221.     LEA.L    MEMORYBASE(PC),A3
  222.     MOVE.L    #PARAMFILENAM,D1    ;LOAD SINGLE PARAMETER (COMMAND-LINE-
  223.     MOVE.L    DOSBAS(PC),A6        ; VERSION)
  224.     JSR    _LVOLOADSEG(A6)
  225.     TST.L    D0
  226.     BEQ.W    .ENDP
  227.     LSL.L    #2,D0
  228.     ADDQ.L    #4,D0
  229.     MOVE.L    D0,(A3)
  230.     MOVE.L    D0,A0
  231.     CLR.L    (A0)
  232.     CMP.L    #'PTCH',8(A0)
  233.     BNE.S    .SP8
  234.     MOVE.L    4(A0),A0
  235. .SP31    CMP.L    #PCH_MINVERSION,(A0)+
  236.     BEQ.S    .SP30
  237.     ADDQ.L    #4,A0
  238.     TST.L    (A0)
  239.     BEQ.W    .ENDP
  240.     BRA.S    .SP31
  241.  
  242. .SP30    TST.L    (A0)
  243.     BEQ.W    .ENDP
  244.     MOVE.L    (A0),A0
  245.     CMP.B    #'V',(A0)+
  246.     BNE.W    ERR
  247.     MOVEQ.L    #0,D1            ;MAINVERSIONCHECK
  248. .SPV1    MOVE.B    (A0)+,D0
  249.     BEQ.W    ERR
  250.     AND.W    #$F,D0
  251.     LSL.W    #4,D1
  252.     OR.W    D0,D1
  253.     CMP.B    #'.',(A0)
  254.     BNE.S    .SPV1
  255.     CMP.W    #1,D1            ;VERSION-#
  256.     BHI.S    .SP8
  257.  
  258.     ADDQ.L    #1,A0            ;SKIP '.'
  259.     MOVEQ.L    #0,D1
  260.     MOVE.B    (A0)+,D0
  261.     BEQ.W    ERR
  262.     AND.W    #$F,D0
  263.     LSL.W    #4,D1
  264.     OR.W    D0,D1
  265.     MOVE.B    (A0)+,D0
  266.     BEQ.W    ERR
  267.     AND.W    #$F,D0
  268.     LSL.W    #4,D1
  269.     OR.W    D0,D1
  270.  
  271.     CMP.W    #4,D1            ;SUBVERSION-#
  272.     BHI.S    .SP8
  273.     BRA.W    .ENDP
  274.  
  275. .SP8    LEA.L    MEMORYBASE(PC),A3
  276. .SP7    MOVE.L    (A3),A2
  277.     TST.L    (A2)
  278.     BEQ.S    .SP6
  279.     MOVE.L    (A3),A3
  280.     BRA.S    .SP7
  281.  
  282. .SP6    CLR.L    (A3)
  283.     MOVE.L    A2,D1
  284.     SUBQ.L    #4,D1
  285.     LSR.L    #2,D1
  286.     MOVE.L    DOSBAS(PC),A6
  287.     JSR    _LVOUNLOADSEG(A6)
  288.     BRA.W    .ENDP
  289.  
  290. .ALLP    LEA.L    LOCKNAM(PC),A1            ;LOAD PARAMETERS
  291.     MOVE.L    A1,D1
  292.     MOVE.L    #MODE_READWRITE,D2
  293.     MOVE.L    DOSBAS(PC),A6
  294.     JSR    _LVOLOCK(A6)
  295.     TST.L    D0
  296.     BEQ.W    ERR
  297.     MOVE.L    D0,PARAMLOCK(A5)
  298.     MOVE.L    PARAMLOCK(PC),D1
  299.     MOVE.L    #PARAMINFO,D2
  300.     MOVE.L    DOSBAS(PC),A6
  301.     JSR    _LVOEXAMINE(A6)
  302.     TST.L    D0
  303.     BEQ.W    ERR
  304.     BRA.S    .1
  305.  
  306. .3    MOVE.L    PARAMLOCK(PC),D1
  307.     MOVE.L    #PARAMINFO,D2
  308.     MOVE.L    DOSBAS(PC),A6
  309.     JSR    _LVOEXNEXT(A6)
  310.     TST.L    D0
  311.     BEQ.W    .2
  312. .1    LEA.L    PARAMINFO,A0
  313.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  314.     BNE.S    .3
  315.     LEA.L    MEMORYBASE(PC),A3
  316. .5    TST.L    (A3)
  317.     BEQ.S    .4
  318.     MOVE.L    (A3),A3
  319.     BRA.S    .5
  320.  
  321. .4
  322.     LEA.L    PARAMINFO,A0
  323.     LEA.L    FIB_FILENAME(A0),A1
  324.     LEA.L    BUFFILNAM(PC),A0
  325.     MOVEQ.L    #$68-1,D0
  326. .26    MOVE.B    (A1)+,(A0)+
  327.     DBF    D0,.26
  328.  
  329.     MOVE.L    #FILENAM,D1
  330.     MOVE.L    DOSBAS(PC),A6
  331.     JSR    _LVOLOADSEG(A6)
  332.     TST.L    D0
  333.     BEQ.S    .3
  334.     LSL.L    #2,D0
  335.     ADDQ.L    #4,D0
  336.     MOVE.L    D0,(A3)
  337.     MOVE.L    D0,A0
  338.     CLR.L    (A0)
  339.     CMP.L    #'PTCH',8(A0)
  340.     BNE.S    .8
  341.     MOVE.L    4(A0),A0
  342. .31    CMP.L    #PCH_MINVERSION,(A0)+
  343.     BEQ.S    .30
  344.     ADDQ.L    #4,A0
  345.     TST.L    (A0)
  346.     BEQ.W    .3
  347.     BRA.S    .31
  348.  
  349. .30    TST.L    (A0)
  350.     BEQ.W    .3
  351.     MOVE.L    (A0),A0
  352.     CMP.B    #'V',(A0)+
  353.     BNE.W    ERR
  354.     MOVEQ.L    #0,D1            ;MAINVERSIONCHECK
  355. .APV1    MOVE.B    (A0)+,D0
  356.     BEQ.W    ERR
  357.     AND.W    #$F,D0
  358.     LSL.W    #4,D1
  359.     OR.W    D0,D1
  360.     CMP.B    #'.',(A0)
  361.     BNE.S    .APV1
  362.     CMP.W    #1,D1            ;VERSION-#
  363.     BHI.S    .8
  364.  
  365.     ADDQ.L    #1,A0            ;SKIP '.'
  366.     MOVEQ.L    #0,D1
  367.     MOVE.B    (A0)+,D0
  368.     BEQ.W    ERR
  369.     AND.W    #$F,D0
  370.     LSL.W    #4,D1
  371.     OR.W    D0,D1
  372.     MOVE.B    (A0)+,D0
  373.     BEQ.W    ERR
  374.     AND.W    #$F,D0
  375.     LSL.W    #4,D1
  376.     OR.W    D0,D1
  377.  
  378.     CMP.W    #4,D1            ;SUBVERSION-#
  379.     BHI.S    .8
  380.     BRA.W    .3
  381.  
  382. .8    LEA.L    MEMORYBASE(PC),A3
  383. .7    MOVE.L    (A3),A2
  384.     TST.L    (A2)
  385.     BEQ.S    .6
  386.     MOVE.L    (A3),A3
  387.     BRA.S    .7
  388.  
  389. .6    CLR.L    (A3)
  390.     MOVE.L    A2,D1
  391.     SUBQ.L    #4,D1
  392.     LSR.L    #2,D1
  393.     MOVE.L    DOSBAS(PC),A6
  394.     JSR    _LVOUNLOADSEG(A6)
  395.     BRA.W    .3
  396.  
  397. .2    MOVE.L    PARAMLOCK(PC),D1
  398.     MOVE.L    DOSBAS(PC),A6
  399.     JSR    _LVOUNLOCK(A6)
  400.     CLR.L    PARAMLOCK        ;END OF LOADING PARAMETERS
  401.  
  402.  
  403.  
  404. .ENDP    LEA.L    MEMORYBASE(PC),A3
  405.     TST.L    (A3)
  406.     BEQ.W    ERR
  407.     MOVEQ.L    #0,D0
  408. .10    MOVE.L    (A3),A3
  409.     ADDQ.W    #1,D0
  410.     TST.L    (A3)
  411.     BNE.S    .10
  412.     MOVE.W    D0,PARAMCOUNT
  413.  
  414.     TST.W    PARAMCOUNT
  415.     BEQ.W    ERR
  416.     MOVE.L    #$FFFF,D0
  417.     MOVEQ.L    #0,D1
  418.     MOVE.W    PARAMCOUNT,D1
  419.     CMP.W    #5,D1
  420.     BLS.S    .PI1
  421.     MULU.W    #5,D0
  422.     DIVU.W    D1,D0
  423.     BRA.S    .11
  424.  
  425. .PI1    MOVE.L    #$FFFF,D0
  426.  
  427. .11    LEA.L    PROPINFO1(PC),A0
  428.     MOVE.W    D0,PI_VERTBODY(A0)
  429.     MOVE.W    D0,LENGTHBODY
  430.  
  431.     MOVE.W    PARAMCOUNT(PC),D1
  432.     SUBQ.W    #1,D1
  433. .27    LEA.L    MEMORYBASE(PC),A4
  434.     MOVE.W    PARAMCOUNT(PC),D0
  435.     SUBQ.W    #1,D0
  436. .15    DBF    D0,.13
  437.     DBF    D1,.27
  438.     BRA.S    .14
  439.  
  440. .13
  441. .16    MOVE.L    (A4),A3
  442.     TST.L    (A3)
  443.     BEQ.S    .15
  444.     MOVE.L    $4(A3),A1
  445. .18    CMP.L    #PCH_NAME,(A1)+
  446.     BEQ.S    .17
  447.     ADDQ.L    #4,A1
  448.     TST